/*
					ORDENACAO DE VETOR UTILIZANDO SOCKETS EM C
 =======================================================================================
 Nome        : Operacoes.c
 Autores     : Eduardo Aramizu, Matheus Zoccoler
 Disciplina  : SSC0640 – Sistemas Computacionais Distribuídos (Engenharia de Computacao)
 Descricao   : Nesse programa definimos o corpo das operacoes basicas de manipulacao de 
				vetores utilizadas no problema.				
 ========================================================================================
 */
#ifndef OPERACOES_H_INCLUDED
#include "Operacoes.h"
#endif

void randomVector(int a[], int tam)
{
    int i;

    srand(time(NULL));  //Gera seed aleatorio

    for(i=0; i<tam; ++i)
    {
        a[i]=(rand()%MAX)+1;
    }
}

//http://www.comp.dit.ie/rlawlor/Alg_DS/sorting/quickSort.c
void quickSort2(int a[], int l, int r)
{
    int j;

    if( l < r )
    {
        //Dividir e conquistar
        j = partition( a, l, r);
        quickSort2( a, l, j-1);
        quickSort2( a, j+1, r);
    }
}

int partition(int a[], int l, int r)
{
    int pivot, i, j, t;
    pivot = a[l];
    i = l;
    j = r+1;

    while(1)
    {
        do ++i;
        while( a[i] <= pivot && i <= r );
        do --j;
        while( a[j] > pivot );
        if( i >= j ) break;
        t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    t = a[l];
    a[l] = a[j];
    a[j] = t;
    return j;
}

void quickSort(int a[], int tam)
{
	quickSort2(a, 0, tam-1);
}
